package com.atguigu.gmall.product.service;

import com.alibaba.fastjson.JSONObject;
import com.atguigu.gmall.model.product.*;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * @author Fxz
 * @version 1.0
 * @date 2022-02-04 15:53
 */
@SuppressWarnings(("all"))
public interface ManageService {

	/**
	 * 获取所有一级分类数据
	 * @return 一级分类数据
	 */
	List<BaseCategory1> getBaseCategory1();

	/**
	 * 根据一级分类id获取二级分类数据
	 * @param category1Id 一级分类id
	 * @return 二级分类数据
	 */
	List<BaseCategory2> getBaseCategory2(Long category1Id);

	/**
	 * 根据二级分类id获取所有三级分类数据
	 * @param category2Id 二级分类id
	 * @return 三级分类数据
	 */
	List<BaseCategory3> getBaseCategory3(Long category2Id);

	/**
	 * 根据分类id 获取平台属性列表
	 * @param category1Id 一级分类id
	 * @param category2Id 二级分类id
	 * @param category3Id 三级分类id
	 * @return 平台属性值
	 */
	List<BaseAttrInfo> getBaseAttrInfo(Long category1Id, Long category2Id, Long category3Id);

	/**
	 * 保存平台属性
	 */
	void saveAttrInfo(BaseAttrInfo baseAttrInfo);

	/**
	 * 根据平台属性id获取平台属性值集合
	 */
	List<BaseAttrValue> getAttrValueList(Long attrId);

	/**
	 * 跟据三级分类id分页查询spu
	 */
	IPage<SpuInfo> getSpuInfoList(Page<SpuInfo> spuInfoPage, SpuInfo spuInfo);

	/**
	 * 获取所有销售属性
	 */
	List<BaseSaleAttr> getBaseSaleAttrList();

	/**
	 * 保存spu信息
	 */
	Boolean saveSpuInfo(SpuInfo spuInfo);

	/**
	 * 跟据spuId查询spuImage列表
	 */
	List<SpuImage> getSpuImageList(Long spuId);

	/**
	 * 跟据spuId查询spu对应的销售属性以及销售属性值
	 */
	List<SpuSaleAttr> getSpuSaleAttrList(Long spuId);

	/**
	 * 保存skuInfo
	 */
	Boolean saveSkuInfo(SkuInfo skuInfo);

	/**
	 * 分页查询skuInfo
	 */
	IPage getSkuInfoList(Page<SkuInfo> skuInfoPage);

	/**
	 * 商品上架
	 */
	Boolean onSale(Long skuId);

	/**
	 * 商品下架
	 */
	Boolean cancelSale(Long skuId);

	/**
	 * 跟据skuId 查询skuInfo以及skuImageList
	 */
	SkuInfo getSkuInfo(Long skuInfo);

	/**
	 * 跟据三级分类id获取分类信息
	 */
	BaseCategoryView getCategoryViewByCategory3Id(Long category3Id);

	/**
	 * 跟据skuId查询商品价格
	 */
	BigDecimal getSkuPrice(Long skuId);

	/**
	 * 跟据spuId和skuId查询销售属性和销售属性值
	 */
	List<SpuSaleAttr> getSpuSaleAttrListCheckBySku(Long spuId, Long skuId);

	/**
	 * 跟据spuId获取skuId和销售属性id的组合
	 */
	Map<Object, Object> getSkuValueIdsMap(Long spuId);

	/**
	 * 获取全部分类信息
	 */
	List<JSONObject> getBaseCategoryList();

	/**
	 * 跟据品牌id获取品牌信息
	 */
	BaseTrademark getTrademark(Long tmId);

	/**
	 * 跟据skuId查询平台属性
	 */
	List<BaseAttrInfo> getAttrList(Long skuId);

}
